﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using Tibet.Entidades;
using Tibet.Logica.FabricaLogica;
using Tibet.Logica.Interfaces.MotorRegla;

namespace Tibet.Logica.Comandos.ComandoMotorRegla
{
    public class ConsultarLlavesSolas : ConsultarLlaves, IConsultarLlaves
    {
        public override void Ejecutar()
        //Este Metodo valida si las llaves estan puestas en una sola linea sin nada que las acompañe
        //Ejemplo: 
        //          Metodo()
        //                  {
        //                      codigo;
        //                  }
        {
            int LineaActual = 0; //Linea actual que se esta leyendo.
            Resultado Resp = new Resultado(); //Objeto resultado que sera retornado.
            string[] subcadena;

            //Inicializamos Resp asumiendo que el archivo cumple con la regla.
            Resp.Fecha = new DateTime();
            Resp.Fecha = DateTime.Now;
            Resp.Respuesta = true;
            Resp.Mensaje = "No se encontraron errores.";
            Resp.Linea = 0;
            try
            {
                List<EntidadString> listaStr = new List<EntidadString>();

                for (int j = 0; j < ListaEntidad.Count; j++)
                {
                    listaStr.Add((EntidadString)ListaEntidad.ElementAt(j));
                }


                foreach (EntidadString linea in listaStr)   //Recorro la lista linea por linea
                {
                    LineaActual++; //Contamos la linea
                    subcadena = linea.Linea.Split('{', '}'); //Separamos la cadena en fragmentos utilizando { } como separadores
                    if (subcadena.Length == 2) //Si solo existen 2 diviciones quiere decir que hay una sola llave
                    {
                        if (subcadena[0].Length != 0 || subcadena[1].Length != 0) //Si algun fragmento contiene caracteres significa que la llave no esta sola en la linea.
                        {
                            Resp.Linea = LineaActual;
                            Resp.Respuesta = false;
                            Resp.Mensaje = "Existe una llave mal colocada en la linea " + LineaActual;
                            Entidad = (Resp as Entidad);
                        }
                    }
                    //NOTA: si existe 1 división significa que no existen llaves en esa linea,
                    //y si existen mas de 2 asumimos que esta definiendo un arreglo.

                }
                Entidad = (Resp as Entidad);
            }
            catch (Exception e)
            {
                Resp.Linea = LineaActual;
                Resp.Respuesta = false;
                Resp.Mensaje = "Ocurrio un error inesperado al leer la linea " + LineaActual + ". Error " + e.Message;
                Entidad = (Resp as Entidad);
            }
        }

    }
}
